
var Util = new Object();

/**
 * Devuelve un string que representa una fecha en un formato dado.
 * El parámetro 'formato' debe ser una combinación de la cadenas 'd', 'dd', 'M', 'MM','yy', 'yyyy', 'H', 'HH', 'm', 'mm', 's' y 'ss'.
 * 
 * @param {Date} fecha La fecha que se quiere representar.
 * @param {string} formato Un string que representa el formato.
 * @return {string} La fecha representada como un string.
 */
Util.formatDate = function(fecha, formato)
	{
	if(fecha != null && formato != null)
		{
		var reg, rep, val;
		
		if(formato.indexOf("yy") >= 0)
			{
			reg = (formato.indexOf("yyyy") >= 0)? 'yyyy' : 'yy';
			rep = (formato.indexOf("yyyy") >= 0)? fecha.getFullYear() : fecha.getFullYear().toString().substring(2);
			formato = formato.replace(reg, rep);
			}
		
		if(formato.indexOf("M") >= 0)
			{
			val = fecha.getMonth() + 1;
			reg = (formato.indexOf("MM") >= 0)? 'MM' : 'M';
			rep = (val < 10 && formato.indexOf("MM") >= 0)? '0' + val : val
			formato = formato.replace(reg, rep);
			}
		
		if(formato.indexOf("d") >= 0)
			{
			val = fecha.getDate();
			reg = (formato.indexOf("dd") >= 0)? 'dd' : 'd';
			rep = (val < 10 && formato.indexOf("dd") >= 0)? '0' + val : val
			formato = formato.replace(reg, rep);
			}
		
		if(formato.indexOf("H") >= 0)
			{
			val = fecha.getHours();
			reg = (formato.indexOf("HH") >= 0)? 'HH' : 'H';
			rep = (val < 10 && formato.indexOf("HH") >= 0)? '0' + val : val
			formato = formato.replace(reg, rep);
			}
		
		if(formato.indexOf("m") >= 0)
			{
			val = fecha.getMinutes();
			reg = (formato.indexOf("mm") >= 0)? 'mm' : 'm';
			rep = (val < 10 && formato.indexOf("mm") >= 0)? '0' + val : val
			formato = formato.replace(reg, rep);
			}
		
		if(formato.indexOf("s") >= 0)
			{
			val = fecha.getSeconds();
			reg = (formato.indexOf("ss") >= 0)? 'ss' : 's';
			rep = (val < 10 && formato.indexOf("ss") >= 0)? '0' + val : val
			formato = formato.replace(reg, rep);
			}
		
		return formato;
		}
	return '';	
	};

Util.parseDate = function(fecha, formato)
	{

	};

/**
 * Calcula el tiempo entre dos fechas.
 * El parámetro 'unidad' puede tomar los valores 'y' (años), 'M' (meses), 'd' (días), 'H' (horas), 'm' (minutos) y 's' (segundos).
 * Por defecto, la función devuelve valores positivos, sin embargo, si el parámetro 'signado' es puesto en 'true' y 'fecha1' es mayor que 'fecha2', el resultado será negativo.
 * 
 * @param {Date} fecha1 La primer fecha.
 * @param {Date} fecha2 La segunda fecha.
 * @param {string} unidad La unidad en que se debe calcular el tiempo.
 * @param {bool} signado Un booleando que indica si el resultado debe ser signado o no.
 * @return {number} El tiempo entre las dos fechas.
 */
Util.timeBetween = function(fecha1, fecha2, unidad, signado)
	{
	if(signado == null) signado = false;
	var time1 = fecha1.getTime()/1000;
	var time2 = fecha2.getTime()/1000;
	
	if(unidad == 'm') { time1 /= 60; time2 /= 60; }
	if(unidad == 'H') { time1 /= 3600; time2 /= 3600; }
	if(unidad == 'd') { time1 /= 24*3600; time2 /= 24*3600; }
	if(unidad == 'M') { time1 /= 30*24*3600; time2 /= 30*24*3600; }
	if(unidad == 'y') { time1 /= 365*24*3600; time2 /= 365*24*3600; }
	
	return (signado && time1 > time2)? time1-time2 : time2-time1;
	}

/**
 * Devuelve un string que representa un número en un formato dado.
 * 
 * @param {number} numero El número que se quiere representar.
 * @param {string} decimal El caracter utilizado como separador decimal.
 * @param {string} miles El caracter utilizado como separador de miles.
 * @return {string} El número representado como un string.
 */
Util.formatNumber = function(numero, decimal, miles)
	{
	var num = numero.toString();
	var enteros = '';
	var decimales = '';

	// Separo la parte decimal de la parte entera.
	var pos = num.indexOf('.');
	if(pos >= 0 && num.length >= pos+1)
		{
		enteros = num.substr(0, pos);
		decimales = num.substr(pos+1);
		}
	else
		{enteros = num;}

	// Agrego el separador de miles.
	num = '';
	while(enteros.length > 3)
		{
		num = num + miles + enteros.substring(enteros.length - 3, enteros.length);
		enteros = enteros.substr(0, enteros.length - 3);
		}
	num = enteros + num;

	// Agrego el separador de decimales.
	if(decimales != '') {num = num + ',' + decimales;}

	return num;		
	}

/**
 * Conveirte un string, que representa un número en un formato dado, en un número.
 * 
 * @param {string} numero El string que representa un número.
 * @param {string} decimal El caracter utilizado como separador decimal.
 * @param {string} miles El caracter utilizado como separador de miles.
 * @return {number} El número representado por el string.
 */
Util.parseNumber = function(numero, decimal, miles)
	{
	if(numero == null || numero.length == 0) return 0;
	
	// Elimino los separadores de miles.
	while(numero.indexOf(miles) >= 0) { numero = numero.replace(miles, ''); }
	
	// Reemplazo el separador decimal.
	if(numero.indexOf(decimal) >= 0) { numero = numero.replace(decimal, '.'); }
	
	// Devuelvo el valor.
	if(isNaN(numero))
		{ return 0; }
	else
		{ return (numero.indexOf('.') >= 0)? parseFloat(numero) : parseInt(numero, 10); }
	}
